# Python configuration file for building, dependencies, and tooling.
#
# For more information, visit
# https://snarky.ca/what-the-heck-is-pyproject-toml/.

[build-system]
build-backend = "poetry.core.masonry.api"
requires = ["poetry-core>=1.0.0"]

[tool.black]
line-length = 80

[tool.coverage.report]
exclude_lines = [
    "if sys.version_info.*",
    "pragma: no cover",
    "raise NotImplementedError",
]
fail_under = 100
show_missing = true

[tool.coverage.run]
branch = true
command_line = "-m pytest"
omit = []
source = ["sharpen"]

[tool.mypy]
check_untyped_defs = true
disallow_untyped_calls = false
disallow_untyped_defs = true
exclude = [
    '\.benchmarks/',
    '\.cache/',
    '\.hypothesis/',
    '\.pytest_cache/',
    '\.venv/',
    'tmp/',
]
ignore_missing_imports = true
no_implicit_optional = true
strict_optional = true
warn_redundant_casts = true
warn_return_any = true
warn_unused_ignores = true

[tool.poetry]
authors = ["c0digam0s <c0digam0s@tutanota.com>"]
description = "An attempt to unf*ck the Sharp 5 disc CD + tape + radio deck audio output."
documentation = "https://grugbrain.dev"
homepage = "https://notabug.org/c0digam0s/sharpen"
keywords = []
license = "MIT"
name = "sharpen"
readme = "README.md"
version = "0.1.0"

[tool.poetry.dependencies]
python = "^3.9"
typer = "^0.12.0"
pyaudio = "0.2.11"

[tool.poetry.group.dev.dependencies]
bandit = "^1.7.0"
black = { extras = ["jupyter"], version = "^24.3.0" }
coverage = { extras = ["toml"], version = "^7.4.0" }
flake8 = "^7.0.0"
flake8-bugbear = "^24.2.0"
flake8-docstrings = "^1.7.0"
flake8-import-order = "^0.18.0"
mccabe = "^0.7.0"
mkdocs = "^1.5.0"
mkdocs-material = "^9.5.0"
mkdocstrings = "^0.24.0"
mypy = "^1.9.0"
nbqa = "^1.8.0"
pymdown-extensions = "^10.7.0"
pyreadline3 = { markers = "sys_platform == 'win32'", version = "^3.4.0" }
pytest = "^8.1.0"
pytest-cov = "^5.0.0"
pytest-mock = "^3.14.0"
toml = "^0.10.0"
tox = "^4.14.0"
types-toml = "^0.10.0"

[tool.poetry.scripts]
sharpen = "sharpen.__main__:app"
[tool.pytest.ini_options]
addopts = "-sv"
filterwarnings = ["ignore::DeprecationWarning"]
markers = [
    "e2e: mark as end to end test.",
    "unit: mark as unit test.",
]
python_classes = "Test*"
python_files = [
    "__init__.py",
    "test_*.py",
]
python_functions = ["test_*"]
testpaths = ["tests"]
